包名 xyz.wystudio.tlb.shake

/**
 * 摇一摇绳包_1.0
 *
 * 本绳包作者：WYstudio QQ：1519258319
 * 最后一次编辑日期：2023-8-2
 *
 * 警告⚠️ 本绳包仅供学习参考，禁止用于任何非法用途！！
 * 警告⚠️ 使用本绳包所造成的任何后果与本绳包无关！！
 */

@附加权限("android.permission.VIBRATE")
@导入Java("android.content.Context")
@导入Java("android.hardware.Sensor")
@导入Java("android.hardware.SensorEvent")
@导入Java("android.hardware.SensorEventListener")
@导入Java("android.hardware.SensorManager")
类 摇一摇
	
	@code
	SensorManagerHelper sensorManagerHelper;
	@end
	
	/*
	开始摇晃监听
	
	参数一：要监听的窗口
	参数二：摇晃阈值
	(此值越小，越灵敏。默认10)
	*/
	方法 开始监听(环境 : 窗口,摇晃阈值 : 整数 = 10)
		@code
		sensorManagerHelper = new SensorManagerHelper(#环境,#摇晃阈值);
		@end
	结束 方法
	
	/*
	停止监听
	
	一般在切换窗口时调用此方法
	*/
	方法 停止监听()
		@code
		sensorManagerHelper.stop();
		@end
	结束 方法
	
	定义事件 被摇一摇()
	
	@code
	class SensorManagerHelper implements SensorEventListener {

    // 摇晃阈值
    private int medumValue;
    // 两次检测的时间间隔
    private final int UPTATE_INTERVAL_TIME = 1000;
    // 传感器管理器
    private SensorManager sensorManager;
    // 传感器
    private Sensor sensor;
    // 上下文对象context
    private Context context;
    // 上次检测时间
    private long lastUpdateTime;
	// 触发次数
	private int triggercount = 0;

    public SensorManagerHelper(Context context,int p1) {
        this.context = context;
		this.medumValue = p1;
        start();
    }

    /**
     * 开始检测
     */
    public void start() {
                // 获得传感器管理器
                sensorManager = (SensorManager) context
                .getSystemService(Context.SENSOR_SERVICE);
        if (sensorManager != null) {
            // 获得重力传感器
            sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        }
        // 注册
        if (sensor != null) {
            sensorManager.registerListener(this, sensor,
                    SensorManager.SENSOR_DELAY_GAME);
        }
    }

    /**
     * 停止检测
     */
    public void stop() {
        sensorManager.unregisterListener(this);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    /**
     * 重力感应器感应获得变化数据
     * android.hardware.SensorEventListener#onSensorChanged(android.hardware
     * .SensorEvent)
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
		// 现在检测时间
        long currentUpdateTime = System.currentTimeMillis();
		// 两次检测的时间间隔
        long timeInterval = currentUpdateTime - lastUpdateTime;
		if(triggercount != 0){
        // 判断是否达到了检测时间间隔
        if (timeInterval < UPTATE_INTERVAL_TIME) return;
		}
        // 现在的时间变成last时间
        lastUpdateTime = currentUpdateTime;
        // 获得x,y,z坐标
        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];
        
        if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) { 
            #被摇一摇();
			triggercount = triggercount + 1;
        }
    }
}
	@end
结束 类